package com.itbbs.result;/**
 * @Describe：
 * @Author： liuyingao
 * @date： 2021-06-02-8:25
 */

import lombok.Data;

import java.io.Serializable;

/**
 * @Describe:[统一响应类]
 * @title Result
 * @author liuyingao
 * @create 2021-06-02 8:25
 * @desc Result
 **/
@Data
public class Result<T> implements Serializable {
    /**
     * 版本号
     */
    private static final long serialVersionUID = 1L;

    /**
     * 状态码
     */
    private Integer code;

    /**
     * 返回信息
     */
    private String msg;

    /**
     * 返回数据
     */
    private T data;

    private static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {
        Result<T> result = new Result<>();
        if (body != null){
            result.setData(body);
        }
        result.setCode(resultCodeEnum.getCode());
        result.setMsg(resultCodeEnum.getMsg());
        return result;
    }

    private static <T> Result<T> build(ResultCodeEnum resultCodeEnum) {
        Result<T> result = new Result<>();
        result.setCode(resultCodeEnum.getCode());
        result.setMsg(resultCodeEnum.getMsg());
        return result;
    }

    /**
     * 操作成功，有数据返回
     * @param data 返回的数据
     * @param <T> 任意类型
     */
    public static<T> Result<T> ok(T data){
        return Result.build(data,ResultCodeEnum.SUCCESS);
    }

    /**
     * 操作成功，没有数据
     *
     * @param <T> 任意类型
     */
    public static<T> Result<T> ok(){
        return Result.build(ResultCodeEnum.SUCCESS);
    }


    /**
     * 操作失败，有数据
     * @param data 返回的数据
     * @param <T> 任意类型
     */
    public static<T> Result<T> fail(T data,ResultCodeEnum resultCodeEnum){
        return Result.build(data,resultCodeEnum);
    }

    /**
     * 操作失败，有具体的消息
     *
     * @param resultCodeEnum 统一返回异常枚举
     * @param <T> 任意类型
     */
    public static<T> Result<T> fail(ResultCodeEnum resultCodeEnum){
        return Result.build(resultCodeEnum);
    }


    /**
     * 操作失败，没有数据
     * @param <T> 任意类型
     */
    public static<T> Result<T> fail(){
        return Result.build(ResultCodeEnum.FAIL);
    }

}